package leetcode.code0828;

import java.util.Arrays;

public class Solution extends Solution828 {

	int mod = (int) 1e9 + 7;

	public int uniqueLetterString(String s) {
		char[] chars = s.toCharArray();
		int len = chars.length;
		int[] left = new int[26];
		int[] cur = new int[26];
		Arrays.fill(left, -1);
		Arrays.fill(cur, -1);
		int ans = 0;
		for (int i = 0; i < len; i++) {
			int c = chars[i] - 'A';
			if (cur[c] == -1) {// 第一次出现待结算
				cur[c] = i;
			} else {
				ans += (cur[c] - left[c]) * (i - cur[c]);// 组合
				ans %= mod;
				left[c] = cur[c];// 结算完成变成左界
				cur[c] = i;// 当前i变成下一个结算的位置
			}
		}
		for (int c = 0; c < 26; c++) {// 跳出第一个for没有被结算到的位置，用len结算
			if (cur[c] != -1) {
				ans += (cur[c] - left[c]) * (len - cur[c]);// 组合
				ans %= mod;
			}
		}
		return ans;
	}

	public static void main(String[] args) {
		Solution so = new Solution();
		so.debug1();
		so.debug2();
		so.debug3();
		so.debug4();
		so.debug5();
		so.debug6();
	
	}

}
